package com.regexs;

import org.junit.Test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则表达式的使用
 */
public class Example01 {
    public static void main(String[] args) {
        // 生活成本
        // 那段时间是怎么熬过来的
        // 没有买衣服 没有买护肤品 没有买杂七杂八的东西
        // 没有网费 没有交通费用 没有
    }

    @Test
    public void phone() {
        // 验证手机号码是否正确
        // 1.定义正则 匹配正确的年份
        String regex = "20\\d\\d";
        System.out.println("2019".matches(regex)); // true
        System.out.println("2100".matches(regex)); // false
    }

    @Test
    public void rule() {
        // . 匹配任意一个字符
        String r1 = "a.b";
        System.out.println("ahb".matches(r1)); // true
        System.out.println("abc".matches(r1)); // false

        // 匹配任意一个数字
        String r2 = "20\\d";
        String re1 = "java\\d"; // 对应的正则是java\d
        System.out.println("java9".matches(re1));
        System.out.println("java10".matches(re1)); // false 因为 10表示是两个数字
        System.out.println("javac".matches(re1));

        // 使用Pattern 对象
        // 例如：我们需要匹配一个 010-565923 分段取出手机号码
        // 1.构建 Pattern对象，使用compile（）方法
        String rule = "(\\d{3,4})-(\\d{7,8})";
        Pattern pattern = Pattern.compile(rule);
        // 2.获取 Matcher 对象,使用 matcher() 方法
        String str = "021-1234567";
        Matcher matcher = pattern.matcher(str);
        // 3.调用 matchers() 判断匹配是否通过 true 匹配成功，false 匹配失败
        if (matcher.matches()) {
            // 获取分组信息
            /**
             * group(0)表示匹配的整个字符串；
             * group(1)表示第1个子串
             * group(2)表示第2个子串，以此类推。
             */
            String group = matcher.group(0); // 021-1234567
            System.out.println(group);
            String group1 = matcher.group(1); // 021
            System.out.println(group1);
            String group2 = matcher.group(2); // 1234567
            System.out.println(group2);
        }
    }
}
